package com.wn.portal.controller;

import com.wn.bean.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yellow Docter
 * @date 2023 -07-17
 * @desc
 *
 *
 *
 */
@Slf4j
@RestController
@RequestMapping("/portal")
public class PortalController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    public String findMemberById(@PathVariable("id") Integer id){

        //通过 restTemplate 进行远程调用

        // restTemplate 提供了很多方法 :   restTemplate进行方法调用需要 和  服务提供方 的方法一致
        //                                                          请求方式、参数、返回的类型
        //请求的路径
        String path = "http://localhost:9000/member/";
        String url= path + id;

        log.info("远程调用的url:{}",url);
        //远程调用拿到返回结果
        String result = restTemplate.getForObject(url, String.class);
        return "portal 会员:" + result;
    }

    @GetMapping("/user/{id}")
    @ResponseBody   //把 对象转成 json 返回给前端
    public User findUserById(@PathVariable("id") Integer id){
        String path = "http://localhost:9000/user/";
        String url = path + id;
        //远程调用发送请求
        User user = restTemplate.getForObject(url, User.class);
        return user;
    }

    /**
     * restTemplate post 请求携带参数的操作
     *
     *     发送map过去
     *     发送对象过去
     *
     */
    @PostMapping("/user1")
    @ResponseBody   //把 对象转成 json 返回给前端
    public String addUser1(@RequestBody User user){
        String url = "http://localhost:9000/user/add1";
        //远程调用发送请求
        // 发送的是post请求   携带的参数是: user 对象 、返回的结果是字符串
        String result = restTemplate.postForObject(url, user,String.class);
        return result;
    }

    /**
     *
     *  springmvc 获取请求参数
     *  1、路径获取参数
     *      localhost:8080/user?name=jack&pwd=123
     *      前端的: 表单的get请求 \ a标签的链接请求
     *             axios(url,params:{
     *                 name:"jack",
     *                 pwd:"123",
     *             })
     *
     *      1、直接绑定获取：  String name,String pwd
     *      2、使用注解获取：  @RequestParam("name") String name,@RequestParam("pwd") String pwd
     *      3、直接对象绑定    User user
     *
     *  2、对象获取
     *      localhost:8080/user
     *      请求体:
     *      {
     *          "name":"jack",
     *          "pwd":"123"
     *      }
     *      前端:
     *      axios(url,data:{
     *          name:"jack",
     *          pwd:123
     *      })
     *
     *      通过:
     *      @RequestBody User user 获取参数
     *
     *  3、restful 风格获取
     *    localhost:8080/user/jack/123
     *    前端: axios(url/${name}/${age})
     *
     *    通过注解互获取参数:
     *    @PathVariable("name") String name,@PathVariable("pwd")String pwd
     *
     *  4、特殊的:
     *  文件类型:
     *  前端:  1、必须是表单post 提交  2、数据类型是 multipartFile
     *  后端:  MultipartFile multipartFile 来接受前端的数据
     *
     * @param name
     * @param age
     * @return
     */
//    @PostMapping("/user2/{name}/{age}")
//    @ResponseBody   //把 对象转成 json 返回给前端
//    public String addUser2(@PathVariable("name") String name,@PathVariable("age") Integer age){

    @PostMapping("/user2")
    @ResponseBody   //把 对象转成 json 返回给前端
    public String addUser2(String name, Integer age){

        String url = "http://localhost:9000/user/add2";

        Map<String,Object> map = new HashMap<>();
        map.put("age",age);
        map.put("name",name);

        //远程调用发送请求
        // 发送的是post请求   携带的参数是:  map、返回的结果是字符串
        String result = restTemplate.postForObject(url, map,String.class);
        return result;
    }

}
